/* 编写一个程序，接受用户输入的一个字符串，并判断该字符串是否为有效的邮箱地址。 */
#include <stdio.h>
#include <string.h>

/* 有效地址以（数字，字母，下划线，@，.组成）*/
/* 判断是否为数字字母下划线 */
static int legitimacy(char character);

static int legitimacy(char character)
{
    if (character >= 'a' && character <= 'z')
    {
        return 1;
    }
    else if (character >= 'A' && character <= 'Z')
    {
        return 1;
    }
    else if (character >= '0' && character <= '9')
    {
        return 1;
    }
    else if (character == '_')
    {
        return 1;
    }
    else
    {
        return 0;
    }

    return 0;
}

int mailAddress(char *s)
{
    /* @是否已经出现*/
    int aFlag = 0;
    /* .是否已经出现*/
    int dFlag = 0;
    int size = strlen(s);
    for (int idx = 0; idx < size; idx++)
    {
        if (!legitimacy(s[idx]))
        {
            /* 开头不是这些，直接返回 */
            if (!idx)
            {
                return 0;
            }
            /* 标记@ 且不在最后*/
            if (s[idx] == '@' && !aFlag )
            {
                aFlag = 1;
                continue;
            }
            /* .不可以连续不可以在最后一个位置且在@出现后才出现 */
            else if (s[idx] == '.' && aFlag && idx < size - 1)
            {
                if (legitimacy(s[idx - 1]) && legitimacy(s[idx + 1]))
                {
                    dFlag = 1;
                    continue;
                }
            }
            else
            {
                /* 程序走到这里说明以上都不是 */
                return 0;
            }
        }
    }

    /* 如果没有@ */
    if (!aFlag || !dFlag)
    {
        return 0;
    }

    return 1;
}

int main()
{
    int test = mailAddress("fafaeg56562@faa.com");
    printf("%d\n", test);
}